'use strict';
var __assign =
  (this && this.__assign) ||
  function () {
    __assign =
      Object.assign ||
      function (t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
          s = arguments[i];
          for (let p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
        }
        return t;
      };
    return __assign.apply(this, arguments);
  };
Object.defineProperty(exports, '__esModule', { value: true });
exports.errorConfig = void 0;
let antd_1 = require('antd');
// 错误处理方案： 错误类型
let ErrorShowType;
(function (ErrorShowType) {
  ErrorShowType[(ErrorShowType['SILENT'] = 0)] = 'SILENT';
  ErrorShowType[(ErrorShowType['WARN_MESSAGE'] = 1)] = 'WARN_MESSAGE';
  ErrorShowType[(ErrorShowType['ERROR_MESSAGE'] = 2)] = 'ERROR_MESSAGE';
  ErrorShowType[(ErrorShowType['NOTIFICATION'] = 3)] = 'NOTIFICATION';
  ErrorShowType[(ErrorShowType['REDIRECT'] = 9)] = 'REDIRECT';
})(ErrorShowType || (ErrorShowType = {}));
/**
 * @name 错误处理
 * pro 自带的错误处理， 可以在这里做自己的改动
 * @doc https://umijs.org/docs/max/request#配置
 */
exports.errorConfig = {
  // 错误处理： umi@3 的错误处理方案。
  errorConfig: {
    // 错误抛出
    errorThrower: function (res) {
      let _a = res,
        success = _a.success,
        data = _a.data,
        errorCode = _a.errorCode,
        errorMessage = _a.errorMessage,
        showType = _a.showType;
      if (!success) {
        let error = new Error(errorMessage);
        error.name = 'BizError';
        error.info = {
          errorCode: errorCode,
          errorMessage: errorMessage,
          showType: showType,
          data: data,
        };
        throw error; // 抛出自制的错误
      }
    },
    // 错误接收及处理
    errorHandler: function (error, opts) {
      if (opts === null || opts === void 0 ? void 0 : opts.skipErrorHandler) throw error;
      // 我们的 errorThrower 抛出的错误。
      if (error.name === 'BizError') {
        let errorInfo = error.info;
        if (errorInfo) {
          let errorMessage = errorInfo.errorMessage,
            errorCode = errorInfo.errorCode;
          switch (errorInfo.showType) {
            case ErrorShowType.SILENT:
              // do nothing
              break;
            case ErrorShowType.WARN_MESSAGE:
              antd_1.message.warning(errorMessage);
              break;
            case ErrorShowType.ERROR_MESSAGE:
              antd_1.message.error(errorMessage);
              break;
            case ErrorShowType.NOTIFICATION:
              antd_1.notification.open({
                description: errorMessage,
                message: errorCode,
              });
              break;
            case ErrorShowType.REDIRECT:
              // TODO: redirect
              break;
            default:
              antd_1.message.error(errorMessage);
          }
        }
      } else if (error.response) {
        // Axios 的错误
        // 请求成功发出且服务器也响应了状态码，但状态代码超出了 2xx 的范围
        antd_1.message.error('Response status:'.concat(error.response.status));
      } else if (error.request) {
        // 请求已经成功发起，但没有收到响应
        // \`error.request\` 在浏览器中是 XMLHttpRequest 的实例，
        // 而在node.js中是 http.ClientRequest 的实例
        antd_1.message.error('None response! Please retry.');
      } else {
        // 发送请求时出了点问题
        antd_1.message.error('Request error, please retry.');
      }
    },
  },
  // 请求拦截器
  requestInterceptors: [
    function (config) {
      let _a;
      // 拦截请求配置，进行个性化处理。
      let url =
        (_a = config === null || config === void 0 ? void 0 : config.url) === null || _a === void 0
          ? void 0
          : _a.concat('?token = 123');
      return __assign(__assign({}, config), { url: url });
    },
  ],
  // 响应拦截器
  responseInterceptors: [
    function (response) {
      // 拦截响应数据，进行个性化处理
      let data = response.data;
      if ((data === null || data === void 0 ? void 0 : data.success) === false) {
        antd_1.message.error('请求失败！');
      }
      return response;
    },
  ],
};
